package ar.com.psicosoft.model.psicosoft;

import java.io.Serializable;

import javax.persistence.*;

import ar.com.psicosoft.model.psicosoft_admin.Usuario;

/**
 * The persistent class for the profesional database table.
 * 
 */
@Entity
@Table(name = "profesional", schema = "psicosoft")
@NamedQueries({
		@NamedQuery(name = "Profesional.buscarPorId", query = "SELECT p FROM Profesional p WHERE p.idProfesional = :idProfesional", lockMode = LockModeType.NONE),
		@NamedQuery(name = "Profesional.buscarProfesionales", query = "SELECT p FROM Profesional p", lockMode = LockModeType.NONE),
		@NamedQuery(name = "Profesional.eliminarProfesionalPorId", query = "DELETE FROM Profesional p WHERE p.idProfesional = :idProfesional", lockMode = LockModeType.NONE) })
public class Profesional implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@Column(name = "\"idProfesional\"", unique = true, nullable = false, insertable = false, updatable = false)
	private Integer idProfesional;

	@Column(length = 20)
	private String distrito;

	@Column(length = 20)
	private String folio;

	@Column(length = 20)
	private String lugar;

	@Column(name = "\"matriculaNacional\"", nullable = false, length = 8)
	private String matriculaNacional;

	@Column(name = "\"matriculaProvincial\"", nullable = false, length = 8)
	private String matriculaProvincial;

	@Column(length = 9)
	private String promocion;

	@Column(length = 20)
	private String tomo;

	@Column(name = "\"verTodos\"", nullable = false)
	private Boolean verTodos;

	// bi-directional many-to-one association to Usuario
	@OneToOne(fetch = FetchType.EAGER, mappedBy = "profesional", targetEntity = Usuario.class, optional = false)
	private Usuario usuario;

	// bi-directional many-to-one association to Paciente
	// @OneToMany(mappedBy = "profesional", targetEntity = Paciente.class)
	// private List<Paciente> pacientes = null;

	// bi-directional many-to-one association to Sesion
	// @OneToMany(mappedBy = "profesional", targetEntity = Sesion.class)
	// private List<Sesion> sesions = null;

	public Profesional() {
	}

	/**
	 * @param matriculaNacional
	 * @param matriculaProvincial
	 * @param lugar
	 * @param distrito
	 * @param folio
	 * @param promocion
	 * @param tomo
	 * @param verTodos
	 */
	public Profesional(String matriculaNacional, String matriculaProvincial,
			String lugar, String distrito, String folio, String promocion,
			String tomo, Boolean verTodos) {
		super();
		this.matriculaNacional = matriculaNacional;
		this.matriculaProvincial = matriculaProvincial;
		this.lugar = lugar;
		this.distrito = distrito;
		this.folio = folio;
		this.promocion = promocion;
		this.tomo = tomo;
		this.verTodos = verTodos;
	}

	public Integer getIdProfesional() {
		return this.idProfesional;
	}

	public void setIdProfesional(Integer idProfesional) {
		this.idProfesional = idProfesional;
	}

	public String getDistrito() {
		return this.distrito;
	}

	public void setDistrito(String distrito) {
		this.distrito = distrito;
	}

	public String getFolio() {
		return this.folio;
	}

	public void setFolio(String folio) {
		this.folio = folio;
	}

	public String getLugar() {
		return this.lugar;
	}

	public void setLugar(String lugar) {
		this.lugar = lugar;
	}

	public String getMatriculaNacional() {
		return this.matriculaNacional;
	}

	public void setMatriculaNacional(String matriculaNacional) {
		this.matriculaNacional = matriculaNacional;
	}

	public String getMatriculaProvincial() {
		return this.matriculaProvincial;
	}

	public void setMatriculaProvincial(String matriculaProvincial) {
		this.matriculaProvincial = matriculaProvincial;
	}

	public String getPromocion() {
		return this.promocion;
	}

	public void setPromocion(String promocion) {
		this.promocion = promocion;
	}

	public String getTomo() {
		return this.tomo;
	}

	public void setTomo(String tomo) {
		this.tomo = tomo;
	}

	public Boolean getVerTodos() {
		return this.verTodos;
	}

	public void setVerTodos(Boolean verTodos) {
		this.verTodos = verTodos;
	}

	public Usuario getUsuario() {
		return this.usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	/*
	 * public List<Paciente> getPacientes() { return this.pacientes; }
	 * 
	 * public void setPacientes(List<Paciente> pacientes) { this.pacientes =
	 * pacientes; }
	 * 
	 * public Paciente addPaciente(Paciente paciente) {
	 * getPacientes().add(paciente); paciente.setProfesional(this);
	 * 
	 * return paciente; }
	 * 
	 * public Paciente removePaciente(Paciente paciente) {
	 * getPacientes().remove(paciente); paciente.setProfesional(null);
	 * 
	 * return paciente; }
	 */

	/*
	 * public List<Sesion> getSesions() { return this.sesions; }
	 * 
	 * public void setSesions(List<Sesion> sesions) { this.sesions = sesions; }
	 * 
	 * public Sesion addSesion(Sesion sesion) { getSesions().add(sesion);
	 * sesion.setProfesional(this);
	 * 
	 * return sesion; }
	 * 
	 * public Sesion removeSesion(Sesion sesion) { getSesions().remove(sesion);
	 * sesion.setProfesional(null);
	 * 
	 * return sesion; }
	 */

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((distrito == null) ? 0 : distrito.hashCode());
		result = prime * result + ((folio == null) ? 0 : folio.hashCode());
		// result = prime * result
		// + ((idProfesional == null) ? 0 : idProfesional.hashCode());
		result = prime * result + ((lugar == null) ? 0 : lugar.hashCode());
		result = prime
				* result
				+ ((matriculaNacional == null) ? 0 : matriculaNacional
						.hashCode());
		result = prime
				* result
				+ ((matriculaProvincial == null) ? 0 : matriculaProvincial
						.hashCode());
		// result = prime * result
		// + ((pacientes == null) ? 0 : pacientes.hashCode());
		result = prime * result
				+ ((promocion == null) ? 0 : promocion.hashCode());
		// result = prime * result + ((sesions == null) ? 0 :
		// sesions.hashCode());
		result = prime * result + ((tomo == null) ? 0 : tomo.hashCode());
		result = prime * result
				+ ((verTodos == null) ? 0 : verTodos.hashCode());
		return result;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Profesional other = (Profesional) obj;
		if (distrito == null) {
			if (other.distrito != null)
				return false;
		} else if (!distrito.equals(other.distrito))
			return false;
		if (folio == null) {
			if (other.folio != null)
				return false;
		} else if (!folio.equals(other.folio))
			return false;
		// if (idProfesional == null) {
		// if (other.idProfesional != null)
		// return false;
		// } else if (!idProfesional.equals(other.idProfesional))
		// return false;
		if (lugar == null) {
			if (other.lugar != null)
				return false;
		} else if (!lugar.equals(other.lugar))
			return false;
		if (matriculaNacional == null) {
			if (other.matriculaNacional != null)
				return false;
		} else if (!matriculaNacional.equals(other.matriculaNacional))
			return false;
		if (matriculaProvincial == null) {
			if (other.matriculaProvincial != null)
				return false;
		} else if (!matriculaProvincial.equals(other.matriculaProvincial))
			return false;
		// if (pacientes == null) {
		// if (other.pacientes != null)
		// return false;
		// } else if (!pacientes.equals(other.pacientes))
		// return false;
		if (promocion == null) {
			if (other.promocion != null)
				return false;
		} else if (!promocion.equals(other.promocion))
			return false;
		// if (sesions == null) {
		// if (other.sesions != null)
		// return false;
		// } else if (!sesions.equals(other.sesions))
		// return false;
		if (tomo == null) {
			if (other.tomo != null)
				return false;
		} else if (!tomo.equals(other.tomo))
			return false;
		if (verTodos == null) {
			if (other.verTodos != null)
				return false;
		} else if (!verTodos.equals(other.verTodos))
			return false;
		return true;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Profesional ["
				// + "idProfesional=" + idProfesional
				+ ", distrito=" + distrito + ", folio=" + folio + ", lugar="
				+ lugar + ", matriculaNacional=" + matriculaNacional
				+ ", matriculaProvincial=" + matriculaProvincial
				+ ", promocion=" + promocion + ", tomo=" + tomo + ", verTodos="
				+ verTodos + "]";
	}

}